/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ CarritoServices.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: German Sotelo
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.servicios;

import com.losalpes.catalogo.entities.ItemCarrito;
import com.losalpes.catalogo.entities.Mueble;
import com.losalpes.catalogo.entities.RegistroVenta;
import com.losalpes.catalogo.entities.RegistroVentaPK;
import com.losalpes.catalogo.entities.Usuario;
import com.losalpes.catalogo.excepciones.InvalidOperationException;
import java.util.ArrayList;
import java.util.Date;
import javax.ejb.EJB;
import javax.ejb.Remove;
import javax.ejb.Stateful;

/**
 * implementaciòn de los servicios que se prestan al cliente para administrar su carrito
 * @author German Sotelo
 */
@Stateful
public class CarritoServices implements ICarritoServicesLocal,ICarritoServicesRemote {

    /**
     * Unidad de persistencia de la aplicación
     */
    @EJB
    private IPersistenceServices persistenceServices;

    /**
     * Lista de items del carrito
     */
    private ArrayList<ItemCarrito> itemsCarrito = new ArrayList<ItemCarrito>();

    public CarritoServices() {
        
    }



    public void agregarAlCarrito(Long id, int cantidad) {
        Mueble mueble = (Mueble)persistenceServices.findById(Mueble.class,id);
        ItemCarrito ic = new ItemCarrito();
        ic.setMueble(mueble);
        ic.setCantidad(cantidad);
        itemsCarrito.add(ic);
    }

    public void remove(Long id){
        for(int e=0;e<itemsCarrito.size();e++){
            ItemCarrito ic = itemsCarrito.get(e);
            if(ic.getMueble().getReferencia().equals(id)){
                itemsCarrito.remove(e);
                return;
            }
        }
    }

    public ArrayList<ItemCarrito> getItemsCarrito() {
        return itemsCarrito;
    }

    @Remove
    public void removeAll() {
        itemsCarrito=new ArrayList<ItemCarrito>();
    }

    @Remove
    public void pagarCarrito(Usuario user){
        Date d = new Date();
        try {
            for (ItemCarrito ic:itemsCarrito) {
                RegistroVenta registro = new RegistroVenta();
                RegistroVentaPK registroPK = new RegistroVentaPK(ic.getMueble().getReferencia(), user.getDocumento(), d);
                registro.setRegistroVentaPK(registroPK);
                registro.setProducto(ic.getMueble());
                registro.setCantidad(ic.getCantidad());
                registro.setComprador(user);
                persistenceServices.create(registro);
                /*Mueble m = (Mueble) persistenceServices.findById(Mueble.class, ic.getMueble().getReferencia());
                m.setCantidad(m.getCantidad() - ic.getCantidad());
                persistenceServices.update(m);*/
            }
        }
        catch (InvalidOperationException ex) {
            ex.printStackTrace();
        }
        itemsCarrito = new ArrayList<ItemCarrito>();
    }
}
